/*
 * Copyright ©2015-2021 Jaemon. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package io.gitee.jaemon.spring.adorner.core;

import io.gitee.jaemon.spring.adorner.exception.AdornerException;

/**
 * 注释扫描器
 *
 * @author Jaemon
 * @since 1.0
 */
public interface NoteScanner {
    /**
     * 扫描器
     *
     * @param context
     *      Adorner上下文
     * @return
     *      true | false
     * @throws AdornerException
     *      ex
     */
    boolean doScan(AdornerApplicationContext context) throws AdornerException;

    /**
     * 类名容器设值
     *
     * @param className
     *      类权限名
     * @param value
     *      值
     */
    default void classPut(String className, String value) {
        DocContainer.CONTAINER.classPut(className, value);
    }

    /**
     * 类名容器设值-缺省时写入
     *
     * @param className
     *      类权限名
     * @param value
     *      值
     */
    default void classPutIfAbsent(String className, String value) {
        DocContainer.CONTAINER.classPutIfAbsent(className, value);
    }

    /**
     * 方法名容器设值
     *
     * @param methodName
     *      方法名
     * @param value
     *      值
     */
    default void methodPut(String methodName, String value) {
        DocContainer.CONTAINER.methodPut(methodName, value);
    }

    /**
     * 方法名容器设值-缺省时写入
     *
     * @param methodName
     *      方法名
     * @param value
     *      值
     */
    default void methodPutIfAbsent(String methodName, String value) {
        DocContainer.CONTAINER.methodPutIfAbsent(methodName, value);
    }

    /**
     * 字段属性名容器设值
     *
     * @param fieldName
     *      字段名
     * @param value
     *      值
     * @return
     *      val
     */
    default String fieldPut(String fieldName, String value) {
        return DocContainer.CONTAINER.fieldPut(fieldName, value);
    }

    /**
     * 字段属性名容器设值-缺省时写入
     *
     * @param fieldName
     *      字段名
     * @param value
     *      值
     * @return
     *      val
     */
    default String fieldPutIfAbsent(String fieldName, String value) {
        return DocContainer.CONTAINER.fieldPutIfAbsent(fieldName, value);
    }
}